package belleza.relativa

//IMPORTANTE: SIEMPRE QUE HABLO DE USUARIOID EN ESTA CLASE ME REFIERO AL ID DE LA ENTIDAD PERSONA, NO DE LA ENTIDAD USER

class RedNeuronalService {



    /**
     *
     * @param usuarioId
     * El id de usuario que va a guardar en la red neuronal
     * Se recomienda usar el mismo que en la base de datos
     * Usar 20.000 para el usuario invitado
     * @param generoId
     * 0 si es hombre
     * 1 si es mujer
     * @param interesadoEn
     * 0 busca hombres
     * 1 busca mujeres
     * 2 ambos
     * @param fotoPrincipal
     * La foto principal del usuario
     */
    def createPersona(def usuarioId, def generoId, def interesadoEn, Foto fotoPrincipal) {
        println("Creando la persona en la red neuronal")
        return true
    }

    /**
     *
     * @param usuarioId
     * @param generoId
     * 0 si es hombre
     * 1 si es mujer
     * @return
     */
    def setGeneroPersona(def usuarioId, def generoId) {
        println("Cambiando el genero a: "+generoId)
        return true
    }

    /**
     *
     * @param usuarioId
     * @param interesadoEn
     * 0 busca hombres
     * 1 busca mujeres
     * 2 ambos
     * @return
     */
    def setInteresPersona(def usuarioId, def interesadoEn) {
        println("Cambiando el interes a: "+interesadoEn)
        return true
    }

    /**
     *
     * @param usuarioId
     * El id del usuario del cual se quiere borrar en la red neuronal
     * @return
     */
    def deletePersona(def usuarioId) {
        println("Borrando la persona en la red neuronal")
        return true
    }

    /**
     * Devuelve al azar el numero de imagen con la que se va a entrenar (Esto depende del set de imagenes de entrenamiento)
     * @return
     */
    def getNumeroImagenEntrenamiento(int interesadoEn) {
        return 1
    }

    /**
     * Devuelve una variable del tipo Foto con la imagen para entrenar
     * El controlador con la instancia de la clase Foto tiene que hacer lo que hace el imageControler
     * response.contentType = foto?.fotoType
     * response.contentLength = foto?.foto?.length
     * response.outputStream.write(foto?.foto)
     *
     * Ahora devuelve solamente la imagen del usuario con id=1
     * @return
     */
    def getFotoParaEntrenar(def numeroImagenEntrenamiento) {
        println("Devolviendo la imagen del usuario con id=1")
        def personaInstance = Persona.findById(1)
        if (!personaInstance || !personaInstance.fotos) {
            response.sendError(404)
        }
        def foto = personaInstance?.fotoPrincipal
        return foto
    }

    /**
     * @suarioId
     * id del usuario logueado
     * @param numeroImagenEntrenamiento
     * El id de la imagen con la que se puntuó
     * @param puntaje
     * Puntaje del 1 al 10
     * @return
     */
    def entrenarRed(def usuarioId, def numeroImagenEntrenamiento, def puntaje) {
        return true
    }

    /**
     *
     * @param usuarioId
     * id del usuario logueado
     * @param usuarioObjetivoId
     * id del usuario que se quiere saber si es aceptable en funcion de los gustos del usuario logueado
     */
    float getAceptableUsuario(def usuarioId, def usuarioObjetivoId) {
        return 8.0
    }

    /**
     * TODO: Esto no deberia pasar los filtros tambien????
     * Devuelve una lista con todos los usuarios que le podria gustar al usuario indicado con "usuarioId" (Puntaje mayor a 5)
     * @param usuarioId
     * id del usuario logueado
     * @param cantMaxima
     * cantidad maxima de resultados
     */
    def getUsuariosAceptables(def usuarioId, def cantMaxima) {
        def ints = new ArrayList<Integer>()
        ints.add(1)
        return ints
    }

}
